/*-*-C-*-
 * format include file for the Misc cse
 *
 * This file defines the format of the object templates that this editor
 *  recognises.
 */

#ifndef __defined_format_h
#define __defined_format_h


/*
 * The block of memory which we will send/receive from the shell consists of
 * a ResourceFileObjectTemplateHeaderRec followed by a MiscTemplateRec
 * followed by String/Message/Relocation tables.
 *
 * This is exactly the form of the object's template in the Resource file.
 */


/* ----------------- Miscellaneous object template bodies ---------------- */

/* ColourMenu */

#define  CLASS_COLOURMENU  0x82980

  /* flags */

#define COLOURMENU_GENERATESHOWEVENT   BIT(0)
#define COLOURMENU_GENERATEHIDEEVENT   BIT(1)
#define COLOURMENU_NONEENTRY           BIT(2)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    int colour;
} ColourMenuTemplateRec, *ColourMenuTemplatePtr;


/* ColourDbox */

#define  CLASS_COLOURDBOX  0x829c0

  /* flags */

#define  COLOURDBOX_GENERATESHOWEVENT    BIT(0)
#define  COLOURDBOX_GENERATEHIDEEVENT    BIT(1)
#define  COLOURDBOX_INCLUDENONEBUTTON    BIT(2)
#define  COLOURDBOX_SELECTNONEBUTTON     BIT(3)

  /* template definition */

typedef struct
{
    unsigned int flags;
    MessageReference title;
    int maxtitle;
    unsigned int colour;
} ColourDboxTemplateRec, *ColourDboxTemplatePtr;


/* DCS */

#define  CLASS_DCS  0x82a80

  /* flags */

#define  DCS_GENERATEABOUTTOBESHOWN     BIT(0)
#define  DCS_GENERATEDIALOGUECOMPLETED  BIT(1)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    MessageReference message;
    int maxmessage;
    StringReference window;
} DCSTemplateRec, *DCSTemplatePtr;


/* FileInfo */

#define  CLASS_FILEINFO  0x82ac0

  /* flags */

#define  FILEINFO_GENERATESHOWEVENT    BIT(0)
#define  FILEINFO_GENERATEHIDEEVENT    BIT(1)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    int modified;
    int filetype;
    MessageReference filename;
    int filesize;
    unsigned date[2];
    StringReference window;
} FileInfoTemplateRec, *FileInfoTemplatePtr;


/* FontDbox */

#define  CLASS_FONTDBOX  0x82a00

  /* flags */

#define  FONTDBOX_GENERATESHOWEVENT    BIT(0)
#define  FONTDBOX_GENERATEHIDEEVENT    BIT(1)
#define  FONTDBOX_INCLUDESYSTEMFONT    BIT(2)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    StringReference initialfont;
    int initialheight;
    int initialaspect;
    MessageReference trystring;
    StringReference window;
} FontDboxTemplateRec, *FontDboxTemplatePtr;


/* FontMenu */

#define  CLASS_FONTMENU  0x82a40

  /* flags */

#define  FONTMENU_GENERATESHOWEVENT    BIT(0)
#define  FONTMENU_GENERATEHIDEEVENT    BIT(1)
#define  FONTMENU_SYSTEMFONT           BIT(2)

  /* template definition */

typedef struct
{
    int flags;
    StringReference tickedfont;
} FontMenuTemplateRec, *FontMenuTemplatePtr;


/* Iconbar */

#define  CLASS_ICONBAR  0x82900

  /* flags */

#define  ICONBAR_GENERATESELECTABOUTTOBESHOWN  BIT(0)
#define  ICONBAR_GENERATEADJUSTABOUTTOBESHOWN  BIT(1)
#define  ICONBAR_SHOWSELECTTRANSIENT           BIT(2)
#define  ICONBAR_SHOWADJUSTTRANSIENT           BIT(3)
#define  ICONBAR_GENERATESELECTCLICKEDEVENT    BIT(5)
#define  ICONBAR_GENERATEADJUSTCLICKEDEVENT    BIT(6)

  /* template definition */

typedef struct
{
    int flags;
    int position;
    int priority;
    StringReference spritename;
    int maxsprite;
    MessageReference text;
    int maxtextlen;
    StringReference menu;
    int selectevent;
    int adjustevent;
    StringReference selectshow;
    StringReference adjustshow;
    MessageReference helpmessage;
    int maxhelp;
} IconbarTemplateRec, *IconbarTemplatePtr;


/* PrintDbox */

#define  CLASS_PRINTDBOX  0x82b00

  /* flags */

#define PRINTDBOX_GENERATESHOWEVENT   BIT(0)
#define PRINTDBOX_GENERATEHIDEEVENT   BIT(1)
#define PRINTDBOX_GENERATESETUPEVENT  BIT(2)
#define PRINTDBOX_INCLUDEALLFROMTO    BIT(3)
#define PRINTDBOX_INCLUDECOPIES       BIT(4)
#define PRINTDBOX_INCLUDESCALE        BIT(5)
#define PRINTDBOX_INCLUDEORIENTATION  BIT(6)
#define PRINTDBOX_INCLUDESAVE         BIT(7)
#define PRINTDBOX_INCLUDESETUP        BIT(8)
#define PRINTDBOX_INCLUDEDRAFT        BIT(9)
#define PRINTDBOX_SELECTFROMTO        BIT(10)
#define PRINTDBOX_SELECTSIDEWAYS      BIT(11)
#define PRINTDBOX_SELECTDRAFT         BIT(12)

  /* template definition */

typedef struct
{
    int flags;
    int from;
    int to;
    int copies;
    int scale;
    StringReference furtheroptions;
    StringReference window;
} PrintDboxTemplateRec, *PrintDboxTemplatePtr;


/* ProgInfo */

#define CLASS_PROGINFO  0x82b40

  /* flags */

#define PROGINFO_GENERATESHOWEVENT   BIT(0)
#define PROGINFO_GENERATEHIDEEVENT   BIT(1)
#define PROGINFO_INCLUDELICENCETYPE  BIT(2)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    MessageReference purpose;
    MessageReference author;
    int licencetype;
    MessageReference version;
    StringReference window;
} ProgInfoTemplateRec, *ProgInfoTemplatePtr;


/* Quit */

#define  CLASS_QUIT  0x82a90

  /* flags */

#define QUIT_GENERATESHOWEVENT   BIT(0)
#define QUIT_GENERATEHIDEEVENT   BIT(1)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference title;
    int maxtitle;
    MessageReference message;
    int maxmessage;
    StringReference window;
} QuitTemplateRec, *QuitTemplatePtr;


/* SaveAs */

#define  CLASS_SAVEAS  0x82bc0

  /* flags */

#define SAVEAS_GENERATESHOWEVENT          BIT(0)
#define SAVEAS_GENERATEHIDEEVENT          BIT(1)
#define SAVEAS_EXCLUDESELECTIONBUTTON     BIT(2)
#define SAVEAS_AUTOMATICRAMTRANSFER       BIT(3)
#define SAVEAS_CLIENTSUPPORTSRAMTRANSFER  BIT(4)

  /* template definition */

typedef struct
{
    int flags;
    MessageReference filename;
    int filetype;
    MessageReference title;
    int maxtitle;
    StringReference window;
} SaveAsTemplateRec, *SaveAsTemplatePtr;


/* Scale */

#define  CLASS_SCALE  0x82c00

  /* flags */

#define SCALE_GENERATESHOWEVENT          BIT(0)
#define SCALE_GENERATEHIDEEVENT          BIT(1)
#define SCALE_INCLUDESCALETOFIT          BIT(2)

  /* template definition */

typedef struct
{
    int flags;
    int minvalue;
    int maxvalue;
    int stepsize;
    MessageReference title;
    int maxtitle;
    StringReference window;
    int stdvalue1;
    int stdvalue2;
    int stdvalue3;
    int stdvalue4;
} ScaleTemplateRec, *ScaleTemplatePtr;


/* -------------------- Miscellaneous object templates ------------------- */

typedef union
{
    ColourMenuTemplateRec colourmenu;
    ColourDboxTemplateRec colourdbox;
    DCSTemplateRec dcs;
    FileInfoTemplateRec fileinfo;
    FontDboxTemplateRec fontdbox;
    FontMenuTemplateRec fontmenu;
    IconbarTemplateRec iconbar;
    PrintDboxTemplateRec printdbox;
    ProgInfoTemplateRec proginfo;
    QuitTemplateRec quit;
    SaveAsTemplateRec saveas;
    ScaleTemplateRec scale;
} ObjectTemplateRec, *ObjectTemplatePtr;


/* ----------------------------------------------------------------------- */

#endif
